package 模板方法模式;

abstract class AbstractClass {
    //final的模板方法 子类无法修改
    final void templateMethod() {
        primitiveOperation1();
        primitiveOperation2();
        concreteOperation();
        hook();
    }

    abstract void primitiveOperation1();

    abstract void primitiveOperation2();

    final void concreteOperation() { // implementation here
    }
    //钩子 抽象类 可以什么都不做
    void hook() {
    }
}